package br.com.linhadotempo.struts2;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;

import br.com.linhadotempo.dao.FatoDAO;
import br.com.linhadotempo.dao.UsuarioDAO;
import br.com.linhadotempo.util.Mensagens;
import br.com.linhadotempo.util.Sessao;
import br.com.linhadotempo.util.Util;
import br.com.linhadotempo.util.Validacoes;
import br.com.taimlain.modelo.Fato;
import br.com.taimlain.modelo.Usuario;

import com.opensymphony.xwork2.ActionSupport;

public class FatoAction extends ActionSupport {

	Mensagens msgs = Mensagens.getInstance();
	private Usuario usuario = (Usuario) Sessao.get(Util.USUARIO);
	private Fato fato;

	/*
	 * Action para adicionar um fato
	 */
	@Action(value = "addFato", results = {
			@Result(name = SUCCESS, location = Util.TABELADOTEMPO_JSP),
			@Result(name = INPUT, location = Util.TABELADOTEMPO_JSP) })
	public String addFato() {
		try {
			Sessao.removeMessages();

			fato.setUsuario(usuario);

			if (Validacoes.validaDados(fato)) {

				new FatoDAO().incluir(fato);

				Sessao.put(Util.USUARIO, new UsuarioDAO().get(usuario.getId()));

				msgs.setSuccess("Fato incluido com sucesso!");
				Sessao.put(Util.MESSAGES, msgs);
				return SUCCESS;
			}
			msgs.setWarning("Algum dado informado nao passou na validacao!");
			Sessao.put(Util.MESSAGES, msgs);
			return INPUT;
		} catch (Exception e) {
			e.printStackTrace();
			Mensagens.getInstance().tratarExceptions(e);
			return INPUT;
		}

	}

	/*
	 * Action para alterar um fato
	 */
	@Action(value = "updateFato", results = {
			@Result(name = SUCCESS, location = Util.TABELADOTEMPO_JSP),
			@Result(name = INPUT, location = Util.TABELADOTEMPO_JSP) })
	public String updateFato() {
		try {
			Sessao.removeMessages();

			fato.setUsuario(usuario);

			if (Validacoes.validaDados(fato)) {

				new FatoDAO().alterar(fato);			
				Sessao.put(Util.USUARIO, new UsuarioDAO().get(usuario.getId()));

				msgs.setSuccess("Fato alterado com sucesso!");
				Sessao.put(Util.MESSAGES, msgs);
				return SUCCESS;
			}
			msgs.setWarning("Algum dado informado nao passou na validacao!");
			Sessao.put(Util.MESSAGES, msgs);
			return INPUT;
		} catch (Exception e) {
			e.printStackTrace();
			Mensagens.getInstance().tratarExceptions(e);
			return INPUT;
		}
	}

	public Fato getFato() {
		return fato;
	}

	public void setFato(Fato fato) {
		this.fato = fato;
	}

	private static final long serialVersionUID = -1814160281367863383L;

}
